#include <iostream>

using namespace std;

// https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/
// 111. 二叉树的最小深度
// 给定一个二叉树，找出其最小深度。
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(): val(0),left(nullptr),right(nullptr) {}
    TreeNode(int x): val(x),left(nullptr),right(nullptr) {}
};

class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root == NULL)
            return 0;
        if(root->left == NULL)  // 左子树为空
            return minDepth(root->right) + 1;
        else if(root->right == NULL)
            return minDepth(root->left) + 1;
        else {
            int leftd = minDepth(root->left);
            int rightd = minDepth(root->right);
            return min(leftd, rightd) + 1;
        }
    }
};
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
